package com.ruoyi.sale.service;

import com.ruoyi.product.domain.Product;
import com.ruoyi.product.domain.ProductModel;
import com.ruoyi.purchase.domain.PurchaseModel;
import com.ruoyi.purchase.domain.PurchaseOrder;
import com.ruoyi.sale.domain.SaleorderModel;
import com.ruoyi.sale.domain.SaleorderOrder;
import com.ruoyi.warehousing.domain.Warehousing;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author WangChangShuo
 * @date 2022年05月09日 17:41
 */
public interface ISaleorderService {
    /**
     * 查询销售订单列表
     *
     * @param saleorderOrder 查询条件
     * @return 结果
     */
    List<SaleorderOrder> selectSaleorderOrderList(SaleorderOrder saleorderOrder);

    /**
     * 查询产品型号规格集合
     *
     * @param map 查询条件
     */
    List<ProductModel> selectProductList(Map map);

    /**
     * 通过产品的型号唯一码查询产品子表数据
     *
     * @param hashMap 查询条件
     */
    ProductModel selectProductModelByModelCode(HashMap<String, Object> hashMap);

    /**
     * 通过产品的型号唯一码查询产品子表数据
     *
     * @param modelCode 查询条件
     */


    /**
     * 插入销售订单数据
     *
     * @param saleorderOrder 需要插入的数据
     */
    int insertSaleorder(SaleorderOrder saleorderOrder);

    /**
     * 查询采购订单列表数据
     *
     * @param hashMap 查询条件
     */
    List<PurchaseModel> selectPurchaseModelById(HashMap hashMap);

    /**
     * 插入销售订单子集数据
     *
     * @param saleorderOrder 需要插入的数据
     */
    int insertSaleorderModel(SaleorderOrder saleorderOrder);


    /**
     * 修改采购订单的是否生成销售订单的状态
     *
     * @param hashMap 修改条件
     */
    int updatePurchaseIsCreateSale(HashMap hashMap);

    /**
     * 查询采购订单集合数据
     *
     * @param purchaseOrder 查询条件
     */
    List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder);

    /**
     * 查询采购订单的集合数据
     *
     * @param purchaseOrder 查询条件
     */
    List<PurchaseOrder> selectPurchaseOrderListWithDe(PurchaseOrder purchaseOrder);

    /**
     * 查询主表子表数据 以及做该销售订单之前的 执行数量和 剩余数量
     *
     * @param hashMap 查询条件
     */
    SaleorderOrder selectSaleorderById(HashMap<String, Object> hashMap);

    /**
     * 修改销售订单
     *
     * @param saleorderOrder 销售订单信息
     */
    int updateSaleorderOrder(SaleorderOrder saleorderOrder, PurchaseOrder purchaseOrder);

    /**
     * 根据订单主键 删除 主表以及子表
     *
     * @param saleorderId 销售订单主键
     */
    int deleteSaleOrderById(Long saleorderId);

    /**
     * 查询产品的子集集合
     *
     * @param map 查询条件
     */
    List<ProductModel> selectTableList(HashMap map);


    List<ProductModel>   selectMateTableList(HashMap map);

    /**
     * 查询销售订单的数据
     *
     * @param saleorderOrder 查询条件
     */
    List<SaleorderOrder> selectSaleorderOrderListByStatusIsOne(SaleorderOrder saleorderOrder);

    /**
     * 查询库存数据
     *
     * @param hashMap 查询条件
     */
    List<Warehousing> selectWarehousing(HashMap<String, Object> hashMap);

    /**
     * 修改销售订单中是否生成销货单的状态
     *
     * @param saleorderOrder 修改数据
     */
    int updateSaleorderIsCreateGoods(SaleorderOrder saleorderOrder);

    /**
     * 通过公司主键查询销售订单的数据
     *
     * @param companyId 查询条件
     */
    List<SaleorderOrder> selectSaleorderDeptObj(Long companyId);

    /**
     * 查询上次订单的单价
     *
     * @param hashMap 查询条件
     */
    List<BigDecimal> selectSaleorderNewPrice(HashMap hashMap);

    /**
     * 查询上次订单的单价
     *
     * @param hashMap 查询条件
     */
    List<BigDecimal> selectSaleorderNewPrices(HashMap hashMap);

    /**
     * 根据公司主键查询客户信息
     *
     * @param companyId 公司主键
     * @return 结果
     */
    List<SaleorderOrder> selectSaleGoodsSupplierObj(Long companyId);

    /**
     * 查询采购订单客户信息
     *
     * @param map 查询条件
     */
    List<SaleorderOrder> selectSaleGoodsSupplierObjMap(Map<String, Object> map);

    /**
     * 根据公司主键查询订单信息
     *
     * @param saleorderOrder 查询条件
     * @return 结果
     */
    List<SaleorderOrder> selectSaleorderCustObj(SaleorderOrder saleorderOrder);

    /**
     * 修改销售订单数据
     *
     * @param saleorderOrder 需要修改的数据
     */
    int updateSaleorderOrderIsPay(SaleorderOrder saleorderOrder);

    /**
     * 查询销售订单信息
     *
     * @param hashMap 查询条件
     * @return 结果
     */
    List<SaleorderOrder> selectSaleGoodsByMap(Map<String, Object> hashMap);

    /**
     * 查询销售订单主键
     *
     * @param companyId 公司主键
     * @return 结果
     */
    List<Long> selectById(Long companyId);

    /**
     * 修改销售订单的合同数据
     *
     * @param saleorderOrder1 修改的数据
     */
    int updateSaleorderPdf(SaleorderOrder saleorderOrder1);

    /**
     * 查询销售订单的信息集合
     *
     * @param saleorderId 销售订单主键
     */
    List<Product> selectSaleOrderModelById(Long saleorderId);

    /**
     * 修改销售订单数据
     *
     * @param saleorderOrder1 需要修改的数据
     */
    int updateSaleorder(SaleorderOrder saleorderOrder1);

    /**
     * 通过主表id查询 子表信息
     *
     * @return 结果
     */
    List<SaleorderModel> selectBySaleorderIdList(List<Long> saleorderIdList);

    /**
     * 查询销售订单子表数据集合
     *
     * @param rows 查询条件
     * @return 结果
     */
    List<SaleorderModel> selectModelDataByModelId(String rows);

    /**
     * 修改销售订单子表数据
     *
     * @param saleorderModel 修改的数据
     */
    void updateSaleorderModel(SaleorderModel saleorderModel);

    /**
     * 查询销售订单主表数据
     *
     * @param order 查询条件
     */
    List<SaleorderOrder> selectOrder(SaleorderOrder order);

    /**
     * 查询销售订单子表数据集合
     *
     * @param split 查询条件
     */
    SaleorderModel selectModelDataByModelIds(String[] split);

    /**
     * 根据saleGoodsId 和saleorderModelId 查询 之前的执行数量和剩余数量
     *
     * @param hashMap
     */
    SaleorderModel selectBatchModel(HashMap hashMap);

    /**
     * 通过销售订单子表主键查询销售订单子表数据
     *
     * @param saleorderModelId 销售订单子表主键
     */
    SaleorderModel selectSaleorderModelByModelId(Long saleorderModelId);


    /**
     * 查询是否生成销售订单的
     *
     * @param hashMap 查询条件
     */
    SaleorderOrder selectSaleorderByMap(HashMap<String, Object> hashMap);

    SaleorderOrder selectSaleorderByIdMap(HashMap<String, Object> hashMap);
    /**
     * 修改销售订单数据
     *
     * @param saleorderOrder 需要修改的数据
     */
    int updateSaleorderOrderIsAbandonment(SaleorderOrder saleorderOrder);

    public  void updateStatus(List<Long> saleorders ,String type);

    public int auditSale(SaleorderOrder saleorderOrder);

    /**
     * 获取上一条记录
     * @param saleorderId
     * @return
     */
    Long querypreviousId(Long saleorderId);

    Long queryNextId(Long saleorderId);

    List<Map<String, Object>> pendingReview(Long deptID);
}
